package com.sky.controller.admin;

import com.aliyun.oss.internal.OSSUtils;
import com.sky.constant.MessageConstant;
import com.sky.result.Result;

import com.sky.utils.AliOssUtil;
import com.aliyun.oss.AliOSSUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/**
 * 通用接口<br>
 * 1.文件上传
 */
//@RestController
@Controller
@ResponseBody
@Slf4j
@Api(tags = "通用功能接口,如文件上传等")
@RequestMapping("/admin/common")
@CrossOrigin//解决跨域问题
public class CommonController {
    @Autowired
    private AliOSSUtils aliOssUtil;//自动注入阿里云OSS工具类的对象
    @Autowired
    private AliOssUtil ossUtil;//自动注入OSS工具类的对象

    /**
     * 文件上传接口
     * ### 基本信息
     * <p>
     * **Path：** /admin/common/upload
     * <p>
     * **Method：** POST
     * <p>
     * 请求参数
     * multipart/form-data
     */
/*    @ApiOperation(value = "文件上传接口", notes = "文件上传接口")
    @PostMapping("/upload")
    public Result<String> uploadFile(MultipartFile file) throws IOException {
        //记录日志
        log.info("文件上传, 文件名: {}", file.getOriginalFilename());
        //业务:上传文件到阿里云OSS
        String URL = "";
        try {
            log.info("上传文件到阿里云OSS, 文件名: {}", file.getOriginalFilename());
            URL = aliOssUtil.upload(file);
            log.info("上传文件到阿里云OSS成功, 文件名: {}, URL: {}", file.getOriginalFilename(), URL);
        } catch (IOException e) {
            return Result.error(MessageConstant.UPLOAD_FAILED);
            //文件上传失败, 记录日志并返回错误信息
        }
        //返回统一的响应结果result
        return Result.success(URL);
    }*/
    @ApiOperation(value = "文件上传接口", notes = "文件上传接口")
    @PostMapping("/upload")
    public Result<String> uploadFile(MultipartFile file) throws IOException {
        //记录日志
        log.info("文件上传, 文件名: {}", file.getOriginalFilename());
        //业务:上传文件到阿里云OSS
        byte[] fileBytes = file.getBytes();//获取文件字节数组
        String fileName = file.getOriginalFilename();//获取文件名
        //对文件名进行处理，使用UUID作为文件名
        String extensionName = fileName.substring(fileName.lastIndexOf("."));//获取文件扩展名
        String newFileName = UUID.randomUUID().toString() +"IMG"+extensionName;//生成新的文件名
        //上传文件到OSS
        log.info("上传文件到阿里云OSS, 文件名: {}", newFileName);
        String URL = "";
        try {
            URL = ossUtil.upload(fileBytes, newFileName);//参数1：文件字节数组，参数2：文件名
        } catch (Exception e) {
            log.error("上传文件到阿里云OSS失败, 原因: {}", e.getMessage());
            return Result.error(MessageConstant.UPLOAD_FAILED);
            //文件上传失败, 记录日志并返回错误信息
        }

        //返回统一的响应结果result
        return Result.success(URL);
    }
}

